package br.com.gsh.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.gsh.conexao.ConexaoFactory;
import br.com.gsh.pojo.Usuario;

public class UsuarioDao {

	private Connection connection;

	public UsuarioDao() {
		this.connection = new ConexaoFactory().getConexao();
	}

	public void adiciona(Usuario usuario) throws SQLException {

		String sql = "insert into usuario (nome, email, senha, nick) values (?, ?, ?, ?)";
		PreparedStatement ps = connection.prepareStatement(sql);

		ps.setString(1, usuario.getNome());
		ps.setString(2, usuario.getEmail());
		ps.setString(3, usuario.getSenha());
		ps.setString(4, usuario.getNick());

		ps.execute();
		ps.close();

	}

	public List<Usuario> listar() throws SQLException {

		String sql = "select * from usuario order by id";
		PreparedStatement ps = connection.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();

		List<Usuario> usuarios = new ArrayList<Usuario>();
		Usuario usuario = null;
		while (rs.next()) {

			usuario = new Usuario();
			usuario.setId(rs.getInt("id"));
			usuario.setNome(rs.getString("nome"));
			usuario.setEmail(rs.getString("email"));
			usuario.setSenha(rs.getString("senha"));
			usuario.setNick(rs.getString("nick"));

			usuarios.add(usuario);

		}

		ps.execute();
		ps.close();

		return usuarios;

	}

	public List<Usuario> listarUser(String user) throws SQLException {

		String sql = "select * from usuario where nick <> ? order by id";
		PreparedStatement ps = connection.prepareStatement(sql);
		ps.setString(1, user);
		
		ResultSet rs = ps.executeQuery();

		List<Usuario> usuarios = new ArrayList<Usuario>();
		Usuario usuario = null;
		while (rs.next()) {

			usuario = new Usuario();
			usuario.setId(rs.getInt("id"));
			usuario.setNome(rs.getString("nome"));
			usuario.setEmail(rs.getString("email"));
			usuario.setSenha(rs.getString("senha"));
			usuario.setNick(rs.getString("nick"));

			usuarios.add(usuario);

		}

		ps.execute();
		ps.close();

		return usuarios;

	}
	
	public Usuario findById(int u) throws SQLException {

		String sql = "select * from usuario where id = ?";
		PreparedStatement ps = connection.prepareStatement(sql);
		ps.setInt(1, u);

		ResultSet rs = ps.executeQuery();
		
		rs.next();

		Usuario usuario = new Usuario();

		usuario.setId(rs.getInt("id"));
		usuario.setNome(rs.getString("nome"));
		usuario.setEmail(rs.getString("email"));
		usuario.setSenha(rs.getString("senha"));

		System.out.println("Nome: " + usuario.getNome());

		ps.execute();
		ps.close();

		return usuario;

	}

	public void alterar(Usuario usuario) throws SQLException {

		String sql = "update usuario set nome = ?, email = ?, senha = ?, nick = ? where id = ?";
		PreparedStatement ps = connection.prepareStatement(sql);

		ps.setString(1, usuario.getNome());
		ps.setString(2, usuario.getEmail());
		ps.setString(3, usuario.getSenha());
		ps.setString(4, usuario.getNick());
		ps.setInt(5, usuario.getId());

		ps.execute();
		ps.close();

	}

	public void remove(Usuario usuario) throws SQLException {

		String sql = "delete from usuario where id = ?";
		PreparedStatement ps = connection.prepareStatement(sql);

		ps.setInt(1, usuario.getId());

		ps.execute();
		ps.close();

	}

}
